package org.micro.rbac.core.result;

import com.google.common.collect.Lists;

import java.util.Arrays;
import java.util.List;

/**
 * @author hongsir
 * @apiNote 状态通用枚举
 * @since 2018/11/12 4:11 PM
 */
public enum Code implements ICode {
    /**
     * 状态码
     */
    SUCCESS("0", "成功"),
    FAIL("1", "失败"),
    PROCESSING("2", "处理中"),
    SYS_ERROR("-1", "系统繁忙,请稍候再试"),

    NOT_LOGIN("401", "未登录"),
    REFRESH_TOKEN("402", "刷新token"),
    NOT_FOUND_ERROR("404", "您访问的服务不存在或已停用"),

    NOT_GRANT("203", "权限不足"),

    ROBOT_ERROR("999", "警告:非人类操作"),
    ;

    /**
     * 枚举值码
     */
    private final String code;

    /**
     * 枚举描述
     */
    private final String message;

    /**
     * @param code    枚举值码。
     * @param message 枚举描述。
     */
    Code(String code, String message) {
        this.code = code;
        this.message = message;
    }

    /**
     * 获取全部枚举
     */
    public static List<Code> getAllEnum() {
        List<Code> list = Lists.newArrayList();
        list.addAll(Arrays.asList(values()));
        return list;
    }

    /**
     * 获取全部枚举值
     *
     * @return List<Integer>
     */
    public static List<String> getAllEnumCode() {
        List<String> list = Lists.newArrayList();
        for (Code each : values()) {
            list.add(each.code());
        }
        return list;
    }

    /**
     * 通过Code获取枚举
     */
    public static Code getEnumByCode(String code) {
        Code result = null;
        for (Code statusEnum : getAllEnum()) {
            if (statusEnum.code.equals(code)) {
                result = statusEnum;
                break;
            }
        }
        return result;
    }

    /**
     * 得到枚举值码。
     *
     * @return 枚举值码。
     */
    public String code() {
        return code;
    }

    /**
     * 得到枚举描述。
     *
     * @return 枚举描述。
     */
    public String message() {
        return message;
    }

    @Override
    public String getCode() {
        return code;
    }

    @Override
    public String getMessage() {
        return message;
    }
}
